#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>

int main()
{
    int fd = 0;
    int newfd1 = 3;
    //复制文件描述符1，新分配newfd1来标识标准输出
    dup2(1,newfd1);
    printf("fd = %d\n",fd);
    if((fd = open("file1.txt",O_RDWR|O_CREAT|O_TRUNC,0664)) == -1)
    {
        perror("fail to open");
        exit(-1);
    }
    //关闭标准输出，文件描述符1重新标识fd文件描述符所标识的文件
    //此时printf对文件描述符1的操作，实质是对fd的操作
    dup2(fd,1);
    printf("fd = %d\n",fd);
    printf("hello world\n");

    //因为newfd1标识的是标准输出，所以先关闭文件描述符1后，重新用文件描述符1来标识标准输出
    //此时printf对文件描述符1的操作，实质是就是对标准输出的操作
    dup2(newfd1,1);
    printf("newfd1 = %d\n",newfd1);
    printf("hello world\n");
    return 0;
}